package com.pattern.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Description: 工作代理类的处理程序
 * @Author: whp
 * @Date: 2021-01-28 11:57
 */
public class WorkHandler implements InvocationHandler {

    //代理类的真实对象
    private Object obj;

    //构造真实对象
    public WorkHandler(Object object) {
        this.obj = object;
    }

    /*
     * @Description: 代理
     * @Param: [proxy 代理类的真实代理对象 , method 调用的真实方法, args 代理对象方法传递的参数]
     * @return java.lang.Object
     **/
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        preRequest();
        Object invoke = method.invoke(obj, args);
        postRequest();
        return invoke;
    }

    public Object createProxyObj(){
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),this);
    }

    public void preRequest() {
        System.out.println("访问真实主题之前的预处理。");
    }

    public void postRequest() {
        System.out.println("访问真实主题之后的后续处理。");
    }
}
